package com.example.java.enums;

// 枚举默认继承自 java.lang.Enum 类，因此无法继承其他类，但可以实现接口
// 枚举实现接口，实现接口中的抽象方法
// 枚举常量本身就是一个对象，这个对象代表了枚举类型中的一个特定实例。因此，枚举常量的内在值就是它自身这个对象。
// 当你引用一个枚举常量时，你实际上是在引用枚举类型中的一个特定实例。
public enum MathOperation implements Operation {
    // 枚举实例
    ADDITION {
        @Override
        public double apply(double x, double y) {
            return x + y;
        }
    },
    SUBTRACTION {
        @Override
        public double apply(double x, double y) {
            return x - y;
        }
    },
    MULTIPLICATION {
        @Override
        public double apply(double x, double y) {
            return x * y;
        }
    },
    DIVISION {
        @Override
        public double apply(double x, double y) {
            if (y == 0) {
                throw new ArithmeticException("Cannot divide by zero");
            }
            return x / y;
        }
    };

    public static void main(String[] args) {
        double x = 10;
        double y = 5;

        for (MathOperation op : MathOperation.values()) {
            System.out.printf("%f %s %f = %f%n", x, op, y, op.apply(x, y));
        }
    }
}